home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 351-375 / disk_351 / pdc / libsrc.lzh / LibSrc / StringLib / strtok.c < prev    next >
C/C++ Source or Header  |  1990-04-07  |  1KB  |  65 lines

  1. /*
  2.  * Get next token from string s (NULL on 2nd, 3rd, etc. calls),
  3.  * where tokens are nonempty strings separated by runs of
  4.  * chars from delim.  Writes NULs into s to end tokens.  delim need not
  5.  * remain constant from call to call.
  6.  */
  7.  
  8. #include "config.h"
  9.  
  10. #define    NULL    0
  11.  
  12. static char *scanpoint = NULL;
  13.  
  14. char *                /* NULL if no token left */
  15. strtok(s, delim)
  16. char *s;
  17. register CONST char *delim;
  18. {
  19.     register char *scan;
  20.     char *tok;
  21.     register CONST char *dscan;
  22.  
  23.     if (s == NULL && scanpoint == NULL)
  24.         return(NULL);
  25.     if (s != NULL)
  26.         scan = s;
  27.     else
  28.         scan = scanpoint;
  29.  
  30.     /*
  31.      * Scan leading delimiters.
  32.      */
  33.     for (; *scan != '\0'; scan++) {
  34.         for (dscan = delim; *dscan != '\0'; dscan++)
  35.             if (*scan == *dscan)
  36.                 break;
  37.         if (*dscan == '\0')
  38.             break;
  39.     }
  40.     if (*scan == '\0') {
  41.         scanpoint = NULL;
  42.         return(NULL);
  43.     }
  44.  
  45.     tok = scan;
  46.  
  47.     /*
  48.      * Scan token.
  49.      */
  50.     for (; *scan != '\0'; scan++) {
  51.         for (dscan = delim; *dscan != '\0';)    /* ++ moved down. */
  52.             if (*scan == *dscan++) {
  53.                 scanpoint = scan+1;
  54.                 *scan = '\0';
  55.                 return(tok);
  56.             }
  57.     }
  58.  
  59.     /*
  60.      * Reached end of string.
  61.      */
  62.     scanpoint = NULL;
  63.     return(tok);
  64. }
  65.